import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { Message } from 'element-ui'

const server = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000
})

// 统一注入token
server.interceptors.request.use(confirm => {
  if (store.getters.token) {
    confirm.headers.Authorization = 'Bearer ' + store.getters.token
  }
  return confirm
})

server.interceptors.response.use(res => {
  if (res.data instanceof Blob) return res

  // console.log(res)
  const { success } = res.data
  if (success) return res
  return Promise.reject(res)
})

// 简化响应数据
// server.interceptors.response.use(res => res.data.data)
server.interceptors.response.use(res => {
  // console.log(res)
  if (res.config.responseType === 'blob') return res.data

  if (res.data.success) {
    return res.data.data
  } else {
    Message.error(res.data.message)
    return Promise.reject(new Error(res.data.message))
  }
})

// 老师代码

// // 简化响应数据
// // server.interceptors.response.use(res => res.data.data)
// server.interceptors.response.use(res => {
//   console.log(res)
//   // if (res.config.responseType === 'blob') return res.data
//   if (res instanceof Blob) {
//     return res
//   } else {
//     // if (res.data.success) {
//     return res.data.data
//     // } else {
//     // Message.error(res.data.message)
//     // return Promise.reject(new Error(res.data.message))
//     // }
//   }
// })

// 处理401 token 失效问题
server.interceptors.response.use(undefined, async err => {
  if (err?.response?.status === 401) {
    Message.error('token已失效，请重新登录')
    await store.dispatch('user/Logout')
    router.push({ name: 'LoginPage' })
    return new Promise(() => { })
  }
  return Promise.reject(err)
})

// 处理错误消息提示
server.interceptors.response.use(undefined, err => {
  if (err && err.data && err.data.message) {
    Message.error(err.data.message)
  }
  return Promise.reject(err)
})

export default server
